/**
 * 查询报名数据
*/
const Service = require('egg').Service;

class TableService extends Service {
  constructor() {
    super(...arguments);
    /**
     *@abstract 初始化连接的数据库 db1
    */
    this.client1 = this.app.mysql.get('db1');
  }

  /**
	 * 使用连接进行多表查询
	 * @type left outer 左连接匹配,以左表为基表模糊匹配,匹配不到字段为null
	 * @type inner 内连接匹配,只匹配相关字段
	 * @type right outer 右连接匹配,以右表为基表模糊匹配,匹配不到字段为null
	*/

  async queryWithInnerJoin() {
    const { executeSql } = this.ctx.helper;
    // 内连接可以查询两个或两个以上的表，为了更好的理解，使用两个表的连接查询
    // 写法是’‘SELECT * FROM 表名1 别名1 INNER JOIN 表名2 别名2 ON 表名1.字段=表名2.字段;’’
    const sql = 'select s.name,s.id,c.title,c.content,c.act_id from tx_activitynew s inner join tx_activity_detail c on s.id=c.act_id';
    const result = await executeSql(this.client1, sql);
    return result;
  }

  /**
	 * 使用分组查询
	 * @type group_concat 可以聚合分组的数据group_concat(name)
	 * @example
	 * 多个字段分组查询时，会先按照第一个字段进行分组。如果第一个字段中有相同的值，
	 * MySQL 才会按照第二个字段进行分组。如果第一个字段中的数据都是唯一的，那么 MySQL 将不再对第二个字段进行分组。
	 * count() 统计数量
		 sum() 求和
		 avg() 平均数
		 max() 最⼤值
		 min() 最⼩值
	*/
  async queryWithGroupBy() {
    const { executeSql } = this.ctx.helper;
    const sql = 'select series_id,group_concat(phone) from tx_signup group by series_id';
    const result = await executeSql(this.client1, sql);
    return result;
  }

}


module.exports = TableService;
